package com.test.languagetest;

import java.util.Set;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

import com.pojo.Category;
import com.pojo.Product;

/**
 * @description 延迟加载测试，看日志输出，只有访问属性的时候才会访问数据库
 * @author Leon Plious
 * @date 2020年7月3日
 */
public class HibernateTestLazyLoad {

	
	public static void main(String[] args) {
		
		/*
		 * 此为属性延迟加载
		 */
		SessionFactory sf = new Configuration().configure().buildSessionFactory();
		Session session = sf.openSession();
		session.beginTransaction();
		// 查询-- 实际上并不访问数据库，延迟加载lazyload
		Product p = (Product) session.load(Product.class, 2);
		// 真是访问数据库在对数据进行访问的时候才进行
		System.out.println("log-start");
		System.out.println(p.getName());
		System.out.println("log-end");
		
		session.getTransaction().commit();
		session.close();
		
		/*
		 * 此为关系延迟加载
		 */
		session = sf.openSession();
		session.beginTransaction();
		Category c = (Category) session.get(Category.class, 1);
		
		Set<Product> products = c.getProducts();
		session.getTransaction().commit();
		session.close();
		sf.close();
	}
}
